10 REM BINARY SAVER V3.0 20 REM DESIGNED BY BRANDON CORFMAN 30 REM 40 REM * INITIALIZATION * 45 IF A=0 THEN A=1:LOAD"DIR.OBJ",8,1 50 POKE 650,0:HX$="0123456789ABCDEF":S=54272:FORI=0TO15:POKES+24,I:NEXT 55 POKE 53281,11:POKE 53280,0 60 REM * MAIN MENU * 70 PRINT"[158][147] [176][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][174]" 80 PRINTTAB(5)"[221] [194]INARY [211]AVER V3.0 [221]" 90 PRINTTAB(5)"[221][196]ESIGNED BY [194]RANDON [195]ORFMAN[221]" 100 PRINTTAB(5)"[173][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][189]" 110 PRINT"[159]  [198]1 [146] - [211]OUND : ";:IF SF=1 THEN PRINT "[158][207]N[159]":GOTO130 120 PRINT "[158][207]FF[159]" 130 PRINT"  [198]3 [146] - [206]UMBERS : ";:IF NF=1 THEN PRINT "[158][200]EX[159]":GOTO150 140 PRINT "[158][196]ECIMAL[159]" 150 PRINT"  [198]5 [146] - [195]OPIES : ";:IF CF=1 THEN PRINT "[158][205]ULTIPLE[159]":GOTO170 160 PRINT "[158][207]NE[159]" 170 PRINT"  [198]7 [146] - [211]AVE [205]EMORY [194]LOCK" 180 PRINT"  [198]2 [146] - [211]END [196]ISK [195]OMMAND" 190 PRINT"  [198]8 [146] - [209]UIT TO [213]P[212]IME[158]" 195 PRINT"[152] [208]UBLISHED BY [211]OFTDISK [208]UBLISHING, [201]NC.[158]"; 200 GETZ$:IFZ$=""THEN200 210 IFZ$="[133]"THEN290 220 IFZ$="[137]"THEN1450 230 IFZ$="[134]"THEN320 240 IFZ$="[135]"THEN350 250 IFZ$="[136]"THEN380 260 IFZ$="[140]"THEN1560 270 GOTO200 280 REM * CHANGE SOUND FLAG * 290 SF=1-SF:IFSF=1THENPRINT""SPC(19)"[207]N ":GOTO200 300 PRINT""SPC(19)"[207]FF":GOTO200 310 REM * CHANGE NUMBER FLAG * 320 NF=1-NF:IFNF=1THENPRINT""SPC(19)"[200]EX ":GOTO200 330 PRINT""SPC(19)"[196]ECIMAL":GOTO200 340 REM * CHANGE COPY FLAG * 350 CF=1-CF:IFCF=1THENPRINT""SPC(19)"[205]ULTIPLE":GOTO200 360 PRINT""SPC(19)"[207]NE ":GOTO200 370 REM * ASK PARAMETERS FOR SAVE * 380 PRINT"[147][198]ILENAME: [159]";:L=16:GOSUB730:FI$=IN$ 385 IF FI$="" THEN 60 390 PRINT"[158] [211]TARTING ADDRESS: [157][157][157][157][157][159]"; 400 IFNF=1THENL=4:GOSUB970:SA=A:GOTO420 410 L=5:GOSUB850:SA=VAL(IN$) 420 IFSA>65534THENPRINTTAB(9)"[150][201]NVALID STARTING ADDRESS[145][145][145][145]":GOTO390 430 PRINT"[158][197]NDING ADDRESS + 1: [157][157][157][157][157][157][157][157][157][157][157][157][157][159]"; 440 IFNF=1THENL=4:GOSUB970:EA=A:GOTO460 450 L=5:GOSUB850:EA=VAL(IN$) 460 IFEA>65535OREA<=SATHENPRINTTAB(9)"[150][201]NVALID ENDING ADDRESS[145][145][145][145]":GOTO430 465 PRINTTAB(9)" " 470 PRINTTAB(6)"[201]NSERT SAVE DISK INTO DRIVE" 480 PRINT"  [211]PACE [146] [159]TO CONTINUE,  [198]1 [146] [159]TO ABORT" 490 GETZ$:IFZ$<>" "ANDZ$<>"[133]"THEN490 500 IFZ$="[133]"THEN 60 510 REM * SAVE PROGRAM * 520 PRINT"[147]"TAB(12)"[215]RITING FILE ..." 525 PRINTTAB(11)"[207]NE MOMENT, PLEASE" 530 SYS57812FI$,8,1 540 POKE193,SA-256*INT(SA/256):POKE194,INT(SA/256) 550 POKE174,EA-256*INT(EA/256):POKE175,INT(EA/256) 560 SYS62957 570 GOSUB1120 580 IFSC=1THENSC=0:GOTO520 590 IFCF=1THEN670 600 REM * SINGLE COPY OPTION * 610 PRINTTAB(13)"[208]ROGRAM SAVED!" 620 PRINTTAB(9)"[158][193]NOTHER PROGRAM? ([217]/[206])" 630 GETZ$:IFZ$<>"Y"ANDZ$<>"N"THENGOSUB1330:GOTO630 640 IFZ$="Y"THEN70 650 GOTO60 660 REM * MULTIPLE COPY OPTION * 670 PRINTTAB(7)"[201]NSERT DISK FOR NEXT COPY" 680 PRINT" [211]PACE [146][159] TO CONTINUE, [198]1[146] [159]TO ABORT" 690 GETZ$:IFZ$<>" "ANDZ$<>"[133]"THENGOSUB1330:GOTO690 700 IFZ$="[133]"THENSF=.:GOTO620 710 GOTO520 720 REM * STRING INPUT * 730 IN$="" 740 PRINT"[166]"; 750 GETZ$:IFZ$=""THEN750 755 IF Z$=CHR$(34) THEN 750 760 IFZ$=CHR$(13)THENPRINT"[157] ":RETURN 770 IFLEN(IN$)=LTHEN820 780 IFASC(Z$)=20ANDLEN(IN$)>0THENIN$=LEFT$(IN$,LEN(IN$)-1):GOTO810 790 IFNOT(Z$>=" "ANDZ$<="Z")THEN750 800 IN$=IN$+Z$ 810 PRINT"[157]"Z$;:GOTO740 820 IFASC(Z$)<>20THEN750 830 IN$=LEFT$(IN$,LEN(IN$)-1):GOTO810 840 REM * DECIMAL INPUT * 850 IN$="" 860 PRINT"[166]"; 870 GETZ$:IFZ$=""THEN870 880 IFZ$=CHR$(13)THENPRINT"[157] ":RETURN 890 IFLEN(IN$)=LTHEN940 900 IFASC(Z$)=20ANDLEN(IN$)>0THENIN$=LEFT$(IN$,LEN(IN$)-1):GOTO930 910 IFNOT(Z$>="0"ANDZ$<="9")THEN870 920 IN$=IN$+Z$ 930 PRINT"[157]"Z$;:GOTO860 940 IFASC(Z$)<>20THEN870 950 IN$=LEFT$(IN$,LEN(IN$)-1):GOTO930 960 REM * HEX INPUT * 970 IN$="" 980 PRINT"[166]"; 990 GETZ$:IFZ$=""THEN990 1000 IFZ$=CHR$(13)ANDLEN(IN$)=4THENPRINT"[157] ":GOTO1080 1010 IFLEN(IN$)=LTHEN1060 1020 IFASC(Z$)=20ANDLEN(IN$)>0THENIN$=LEFT$(IN$,LEN(IN$)-1):GOTO1050 1030 IFNOT(Z$>="0"ANDZ$<="9")ANDNOT(Z$>="A"ANDZ$<="F")THEN990 1040 IN$=IN$+Z$ 1050 PRINT"[157]"Z$;:GOTO980 1060 IFASC(Z$)<>20THEN990 1070 IN$=LEFT$(IN$,LEN(IN$)-1):GOTO1050 1080 A=.:FORI=1TO4 1090 L%=ASC(MID$(IN$,I,1)):L%=L%-48+(L%>64)*7:A=16*A+L%:NEXT 1100 RETURN 1110 REM * ERROR CHECKER * 1120 OPEN1,8,15 1130 INPUT#1,EN,EM$,ET,ES:CLOSE1 1140 IFEN<>0THEN1160 1150 RETURN 1160 IFEN=63THEN1200 1170 IFEN=74THEN1260 1180 GOSUB1390:PRINT"[196]ISK ERROR!" 1190 PRINT""EN;EM$;ET;ES:END 1200 PRINT"[196]ISK ERROR! [198]ILE EXISTS!" 1210 PRINT"[210][146]EPLACE OR [193][146]BORT?" 1220 GETZ$:IFZ$<>"R"ANDZ$<>"A"THENGOSUB1390:GOTO1220 1230 IFZ$="A"THEN1560 1240 PRINT"[210]EPLACING FILE ...":OPEN1,8,15,"S0:"+FI$:CLOSE1 1250 SC=1:RETURN 1260 PRINT"[196]ISK ERROR! [196]RIVE NOT READY!" 1270 PRINT"[210][146]ETRY OR [193][146]BORT?" 1280 GETZ$:IFZ$<>"R"ANDZ$<>"A"THENGOSUB1390:GOTO1280 1290 IFZ$="A"THEN1560 1300 OPEN1,8,15,"U;":CLOSE1 1310 SC=1:RETURN 1320 REM * BELL SOUND * 1330 IFSF=.THENRETURN 1340 POKES+1,40:POKES+5,9:POKES+6,9:POKES+4,33 1350 FORI=1TO40:NEXT 1360 POKES+4,32:FORI=1TO400:NEXT 1370 RETURN 1380 REM * ERROR SOUND * 1390 IFSF=.THENRETURN 1400 POKES+1,10:POKES+5,9:POKES+6,9:POKES+4,33 1410 FORI=1TO40:NEXT 1420 POKES+4,32:FORI=1TO400:NEXT 1430 RETURN 1440 REM * SEND DISK COMMAND * 1450 PRINT"[195]OMMAND: ";:L=29:GOSUB730 1460 OPEN1,8,15 1465 IF IN$="" THEN 1490 1467 IF IN$="$" THEN PRINT"[147][159]":SYS 49152:GOTO 1490 1470 PRINT#1,IN$ 1490 PRINTTAB(5)"[158]"; 1500 GET#1,A$:PRINTA$;:IF A$<>CHR$(13) THEN 1500 1505 CLOSE 1 1510 PRINT" [159][208]RESS  [210]ETURN [146][159] TO CONTINUE "; 1520 GETZ$:IFZ$<>CHR$(13)ANDEN=.THENGOSUB1330:GOTO1520 1530 IFZ$<>CHR$(13)ANDEN>0THENGOSUB1390:GOTO1520 1540 GOTO70 1550 REM * END PROGRAM * 1560 PRINT"";:PRINTTAB(11)"[193]RE YOU SURE ([217]/[206])" 1570 GET A$:IF A$="N" THEN PRINTTAB(11)"[145] ":GOTO 200 1580 IF A$<>"Y" THEN 1570 1590 A=0:FOR I=32768 TO 32775 1600 A=A+PEEK(I):NEXT 1610 IF A<>859 THEN PRINT"[147]":END 1700 SYS 8*4096+4